import time
import win32service
import win32serviceutil
 
# 服务名，例如“WMPNetworkSvc”是Windows媒体播放网络服务的名称
service_name = "postgresql-x64-12"

# 获取服务的控制管理器
scm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)

def svc_m():

    try:
        # 打开服务
        print(f'opening {service_name}...')
        
        service = win32service.OpenService(scm, service_name, win32service.SC_MANAGER_ALL_ACCESS)
        print(f'{service_name} is openned.')
        
        # 获取服务的状态
        status = win32service.QueryServiceStatus(service)
        
        print(status)
        # 服务的状态有一个叫做"dwCurrentState"的字段，这里我们关心它的值
        # SERVICE_STOPPED (1): 服务已停止
        # SERVICE_START_PENDING (2): 服务正在启动
        # SERVICE_STOP_PENDING (3): 服务正在停止
        # SERVICE_RUNNING (4): 服务正在运行
        # SERVICE_CONTINUE_PENDING (5): 服务正在继续
        # SERVICE_PAUSE_PENDING (6): 服务正在暂停
        # SERVICE_PAUSED (7): 服务已暂停
        print(f"服务状态: {status[1]}")  # 状态码1是服务的当前状态
        if(status[1] ==win32service.SERVICE_STOPPED):
            print("正在开启服务")
            win32service.StartService(service, None)
            
        elif (status[1] ==win32service.SERVICE_RUNNING):
            print("正在关闭服务")
            # 停止服务
            win32service.ControlService(service, win32service.SERVICE_CONTROL_STOP)
            
        time.sleep(2) 
        # 获取服务的状态
        status = win32service.QueryServiceStatus(service)
        
        # 服务的状态有一个叫做"dwCurrentState"的字段，这里我们关心它的值
        print(f"服务状态: {status[1]}")  # 状态码1是服务的当前状态
    
    except win32service.error as err:
        print(f"服务无法被访问: {err}")
    
    finally:
        # 清理资源
        win32service.CloseServiceHandle(service)
        win32service.CloseServiceHandle(scm)

